package com.example.websocket.controller;

import com.example.websocket.model.ChatUser;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.security.Principal;
import java.util.Set;

/**
 * 用户控制器，提供用户相关的API接口
 */
@RestController
@RequestMapping("/users")
public class UserController {

    // 添加好友
    @PostMapping("/{username}/friends")
    public ResponseEntity<Void> addFriend(@PathVariable String username, @RequestBody String friendUsername) {
        // 添加好友逻辑...

        // 先查询用户是否已存在

        // 如果存在则发送添加好友申请请求

        // 等待对方的同意，一旦同意，则添加好友成功并主动发送一条问候消息

        return ResponseEntity.ok().build();
    }

    // 删除好友
    @DeleteMapping("/{username}/friends/{friendUsername}")
    public ResponseEntity<Void> removeFriend(@PathVariable String username, @PathVariable String friendUsername) {
        // 删除好友逻辑...

        // 先查询好友是否存在于用户的好友列表中

        // 如果存在，则删除好友并更新好友列表

        return ResponseEntity.ok().build();
    }

    // 修改好友备注等信息
    @PutMapping("/{username}/friends/{friendUsername}")
    public ResponseEntity<Void> updateFriend(@PathVariable String username, @PathVariable String friendUsername, @RequestBody ChatUser request) {
        // 修改好友信息逻辑...

        return ResponseEntity.ok().build();
    }

    // 查询好友
    @GetMapping("/{username}/friends/{friendUsername}")
    public ResponseEntity<ChatUser> getFriend(@PathVariable String username, @PathVariable String friendUsername) {
        // 查询好友信息逻辑...

        return ResponseEntity.ok(new ChatUser());
    }

    // 获取好友列表
    @GetMapping("/{username}/friends")
    public ResponseEntity<Set<ChatUser>> getFriends(@PathVariable String username) {
        // 获取好友列表逻辑...

        return ResponseEntity.ok(Set.of(new ChatUser()));
    }


    @GetMapping("/profile")
    public ResponseEntity<ChatUser> getUserProfile(Principal principal) {
        // 获取用户个人资料逻辑...

        return ResponseEntity.ok(new ChatUser());
    }

    @PutMapping("/profile")
    public ResponseEntity<Void> updateUserProfile(@RequestBody ChatUser request, Principal principal) {
        // 更新用户个人资料逻辑...

        return ResponseEntity.ok().build();
    }

    @PutMapping("/password")
    public ResponseEntity<Void> changePassword(@RequestBody ChatUser request, Principal principal) {
        // 更改用户密码逻辑...

        return ResponseEntity.ok().build();
    }


    // 获取好友在线人数
    @GetMapping("/{username}/friends/online")
    public ResponseEntity<Integer> getOnlineFriendsCount(@PathVariable String username) {
        // 获取好友在线人数逻辑...

        return ResponseEntity.ok(0);
    }

    // 获取指定群聊在线人数
    @GetMapping("/{groupName}/online")
    public ResponseEntity<Integer> getOnlineGroupMembersCount(@PathVariable String groupName) {
        // 获取指定群聊在线人数逻辑...

        return ResponseEntity.ok(0);
    }

}